package org.agile4j.patterns.prototype.prototypemanager;

import java.util.HashMap;
import java.util.Map;

/**
 * 原型管理器
 * @author user 韓永旭
 *
 */
public class PrototypeManager {
	
	/**
	 * 用來記錄原型的編號和原型的對應關係
	 */
	private static Map<String, Prototype> map = new HashMap<String, Prototype>() ;
	
	/**
	 * 私有化構造, 防止外部無謂的創建實例
	 */
	private PrototypeManager(){}
	
	/**
	 * 向圓形管理器裏面添加或修改某個圓形註冊
	 * @param prototypeId 原型編號
	 * @param prototype 原型實例
	 */
	public synchronized static void setPrototype(String prototypeId, Prototype prototype){
		map.put(prototypeId, prototype) ;
	}
	
	/**
	 * 從原型管理器裏刪除某個原型註冊
	 * @param prototypeId 原型編號
	 */
	public synchronized static void removePrototype(String prototypeId){
		map.remove(prototypeId) ;
	}
	
	/**
	 * 獲取某個原型編號對應的原型實例
	 * @param prototypeId 原型編號對
	 * @return 原型編號對應的原型實例
	 * @throws Exception
	 */
	public synchronized static Prototype getPrototype(String prototypeId) throws Exception {
		Prototype prototype = map.get(prototypeId) ;
		if (prototype == null) {
			throw new Exception("您希望獲取的原型還沒有被註冊或已被銷毀.") ;
		}
		return prototype ;
	}
	
	
}
